#ifndef SUPERHEADER_H
#define SUPERHEADER_H

#include <stdexcept>
#include <sstream>

#include <QtGui>
#include <QDebug>
#include <QPointF>

#include "math.h"

using namespace std;

//#define ERRS // флаг использования проверок на ошибки
//#define TEST // флаг для возможности unit-test, изменяет в классах protected на public

// Возбуждение исключительной ситуации
inline void error(const QString& str) {
  throw runtime_error(str.toStdString());
}

inline void error(const QString &str, const QString &str2) {
  error(str + str2);
}

// Вычисление квадрата
// Постусловие: результат должен быть не отрицательным
template <class T>
inline T sqr(const T& var) {
  T res = var*var;

#ifdef ERRS
  if (res < 0) error("sqr(): результат отрицательный"); // проверка постусловия
#endif

  return res;
}

#endif
